home *** CD-ROM | disk | FTP | other *** search
- page 55
- maclib bds
- maclib cmac
- maclib z80
-
- direct
- define cursor
- define remcur
- define mwa
- define exycall
- define hidecur
- enddir
- ;
- ;********************************************************
- ;* *
- ;* BDS-C Supplementary Library *
- ;* release 2 *
- ;* *
- ;* Steve de Plater, Nov. 1980 *
- ;* 66 Priam St. *
- ;* Chester Hill, *
- ;* NSW, 2162 *
- ;* Australia *
- ;* Phone: (02) 644 4009 *
- ;* *
- ;* This file: GZ0.ASM release 1 *
- ;* *
- ;********************************************************
- ;
- ;********************************************************
- ;* *
- ;* THIS IS THE ONLY FILE WHICH IS SPECIFIC *
- ;* TO THE EXIDY SORCERER. *
- ;* IT IS ALSO THE ONLY FILE REQUIRING THE *
- ;* "Z80.LIB" MACRO LIBRARY. *
- ;* TO RECONFIGURE FOR YOUR OWN SYSTEM ALL THAT *
- ;* IS ESSENTIAL IS TO PROVIDE A "cursor(x,y)" *
- ;* FUNCTION WHICH CONFORMS TO THE FOLLOWING *
- ;* STANDARDS: *
- ;* (1) PLACES THE CURSOR AT POSITION (X,Y) *
- ;* ON THE VIDEO SCREEN (WHERE X IS THE *
- ;* ROW (DOWN) AND Y IS THE COLUMN (ACROSS))*
- ;* (2) IF (X,Y) IS NOT A VALID SCREEN POSITION *
- ;* (EG: -VE) THEN NO CURSOR MOVEMENT IS *
- ;* PERFORMED. *
- ;* (3) IN ALL CASES THE ADDRESS OF THE CURSOR *
- ;* (ON COMPLETION) IS RETURNED TO THE *
- ;* CALLING FUNCTION. *
- ;* *
- ;********************************************************
- ;
- ;============================================================
- ;
- ; int cursor(x,y);
- ;
- ; moves the cursor to position x (line), y (column) of
- ; the Sorcerer screen. (if possible)!
- ; Returns the offset from the beginning of the screen RAM
- ; of the new cursor position.
-
- prelude cursor
- call arghak ;get the arguements
- push b ;we need it!
-
- getiy equ 0e1a2h ;Exidy Monitor entry points
- wcur equ 0e9cch ;write cursor
- rec equ 0e9e8h ;remove the old one
- ptrset equ 0e9d6h ;find the cursor address
-
- lda arg2 ;get the column
- ora a
- reloc jm,curses ;you can't have a -ve column!
- cpi 64
- reloc jnc,curses ;or one > 63
- lda arg1 ;get the line
- ora a
- reloc jm,curses ;you can't have a -ve line!
- cpi 30
- reloc jnc,curses ;or one > 29
-
- lda arg1+1
- ora a
- reloc jnz,curses
- lda arg2+1
- ora a
- reloc jnz,curses
-
- call getiy
- call rec
- lda arg1
- mov e,a ;and multiply it be 64
- mvi d,0
- mvi b,6
- cur04: sla e
- rl d
- djnz cur04
- stiy e,68h ;and save it in the MWA
- stiy d,69h ;(both bytes)
- lda arg2 ;now get the column
- stiy a,6ah ;and save it too
- stiyi 0,6bh ;high byte is zero
- call wcur ;and put the cursor there!
-
- curses: call ptrset ;just in case we hadn't
- pop b ;told you we'd need it
- ret ;home we go
- postlude cursor ;generate relocation table
-
- getiy equ 0e1a2h
- pushix equ 0e5ddh
- pushiy equ 0e5fdh
- inxix equ 023ddh
- scan equ 0e225h
- ;
- ;==============================================================
- ;
- ; int remcur()
- ;
- ; Removes the cursor from the screen.
- ; Returns the cursor address.
- ;
- prelude remcur
-
- push b
- call getiy
- call rec
- pop b
- ret
-
- postlude remcur
- ;
- ;==============================================================
- ;
- ; int mwa();
- ;
- ; Returns the MWA address.
- ;
- prelude mwa
-
- call getiy
- dw pushiy
- pop h
- ret
-
- postlude mwa
- ;
- ;=============================================================
- ;
- ; int exycall();
- ;
- ; Calls the Exidy Standard Monitor
- ; using the monitor command found at MWA.
- ; Returns 0 if illegal command (or no command)
- ; or 1 if command successfully executed.
- ;
- ; WARNING: This function may not return AT ALL if you
- ; crash it in the Monitor itself! ;BE WARNED!
- ;
- prelude exycall
-
- push b ;just in case!
- dw pushiy ;move IY
- pop h ; to HL
- call scan ;get delims
- jr z,exyc5 ;NONE!
- db 0ddh,021h,012h,0e3h
- exyc1: push h
- dw pushix
- mvi b,2
- exyc2: db 0ddh,07eh,00h
- cmp m
- jr nz,exyc4
- inx h
- dw inxix
- djnz exyc2
- pop d
- pop d
- reloc <lxi b,>,exyc6
- push b
- exyc3: db 0ddh,06eh,00h
- db 0ddh,066h,01h
- pchl
- exyc4: db 0ddh,0e1h
- pop h
- dw inxix
- dw inxix
- dw inxix
- dw inxix
- db 0ddh,07eh,00h
- ora a
- jr nz,exyc1
- exyc5: lxi h,0
- pop b
- ret
- exyc6: lxi h,1
- pop b
- ret
-
- postlude exycall
- ;
- ;=============================================================
- ;
- ; int hidecur(c)
- ; char c;
- ;
- ; Hides the character passed under the cursor (so that
- ; when the cursor is moved then "all secrets will be
- ; made known" (or at least displayed on the screen))!
- ;
- ; Returns the cursor address.
- ;
- prelude hidecur
-
- call arghak
- push b
-
- call getiy ;we may not have it
- lda arg1 ;the char to hide
- stiy a,067h ;and hide it there!
- call ptrset ;get cursor address
-
- pop b
- ret ;and return
-
- postlude hidecur
- ;get cursor address
-
-